package myDefer

import "fmt"

/*
defer关键字会将语句放到待执行的栈中，等所在方法执行结束后按照压栈顺序弹栈执行。
defer会将语句的变量也进行压栈处理，所以defer之后的语句对该行变量的操作，
不影响defer语句执行时该变量的值 n1=1 n2=2
*/
func DeferFunc(n1 int, n2 int) int {
	defer fmt.Println("n1 = ", n1) // 1
	defer fmt.Println("n2 = ", n2) // 2
	n1++                           // n1=2
	n2++                           // n2=3
	n3 := n1 + n2                  // n3=5
	fmt.Println("n3 = ", n3)       // 5
	return n3
}
